package com.lanou3g.code0427.model;

import com.lanou3g.code0427.pojo.User;
import com.lanou3g.code0427.util.JDBCUtil;
import com.lanou3g.code0427.util.MyResultSet;
import com.lanou3g.code0427.util.MyStatement;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/**
 * Created by dllo on 18/4/27.
 */
/*
专门与数据库进行连接

 */
public class Model {
    /**
     * 判断数据库中是否有 某一个用户名
     *
     * @param username 要判断的 用户名
     * @return true: 数据库中有该用户,false数据库中没有该用户
     */
    public boolean hasUsername(String username) {
//        Statement statement = JDBCUtil.getStatement();//获取执行sql语句的对象
//        //判断有没有这个用户,其实就是查找
//        //数据库中 有该用户名的 数据条数
//        //条数为0没有
//        //>0 有
//        String sql = "Select count(*) from users where username='" + username + "'";
//        try {
//            ResultSet rs = statement.executeQuery(sql);
//            rs.next();// 移动到 第一条数据
//            //数量信息肯定是第一列 所以直接写1
//            int count = rs.getInt(1);
//            if (count > 0) {
//                return true;//数据库中 有该名 用户
//            }
//            rs.close();//关闭资源
//        } catch (SQLException e) {
//            e.printStackTrace();
//        }
//
//        return false;
        String sql = "select count (*) from users where username=?";
        MyStatement statement = JDBCUtil.getPreStatement(sql);
        statement.setString(1, username);
        // 执行完这行语句后,不会自动关闭资源
        MyResultSet rs = statement.executeQuery();

        rs.next();//索引移动到一行
        int count = rs.getInt(1);
        rs.close();
        JDBCUtil.closeResource(statement);
        return count > 0;


    }

    public static void main(String[] args) {
        Model model = new Model();
        boolean hasUsername = model.hasUsername("Aaa");
        System.out.println(hasUsername);
    }

    /**
     * 注册
     *
     * @param username 用户名
     * @param psd      密码
     * @param word     喜欢的一句话
     * @return true:注册成功;false 注册失败
     */

    public boolean register(String username,
                            String psd, String word) {
        String sql ="Insert into users ( username,psd,word)"+"values (? , ? , ?)";
        MyStatement statement=JDBCUtil.getPreStatement(sql);
        statement.setString(1,username);
        statement.setString(2,psd);
        statement.setString(3,word);
        int rows=statement.executeUpdate();
        return rows>0;
        //不需要结果集的 执行,可以实现自动关闭资源

//        String sql = "INSERT INTO users (username, psd, word)" +
//                " VALUES (" +
//                "'" + username + "'," +
//                "'" + psd + "'," +
//                "" +
//                "'" + word + "')";
//        Statement statement = JDBCUtil.getStatement();
//        int rows = 0;
//        try {
//            rows = statement.executeUpdate(sql);
//            if (rows > 0) {
//                return true;
//            }
//        } catch (SQLException e) {
//            e.printStackTrace();
//        }
//        return false;

    }

    /**
     * 登录
     *
     * @param username 用户名
     * @param psd      密码
     * @return 登录成功:返回装着用户信息的User对象
     * 登录失败:return null
     */

    public User login(String username, String psd) {
        // 1. 查一下 是否有这个用户
        // 条件是用户名 ,和密码 都匹配上

        String checkLogin = "SELECT  * FROM users WHERE username = ? AND psd = ?";
        PreparedStatement statement = JDBCUtil.getPreStatement(checkLogin);

        try {
            //设置值
            statement.setString(1, username);
            statement.setString(2, psd);

            ResultSet rs = statement.executeQuery();
            User user = null;
            if (rs.next()) {
                user = new User();
                String dbUsername = rs.getString("username");
                String dbPsd = rs.getString("psd");
                String dbWord = rs.getString("word");

                user.setUsername(dbUsername);
                user.setPsd(dbPsd);
                user.setWord(dbWord);
            }
            rs.close();
            JDBCUtil.closeResource(statement);
            return user;
        } catch (SQLException e) {
            e.printStackTrace();
        }

        return null;
    }

}

